<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>async</title>
</head>
<body>
<script>
    // async
    // 可以作用在任何方法前, 返回值是一个Promise对象(回调函数也可以使用async)
    // 函数内部return的返回值, 会成为then回调函数的参数
    // var lk = async () => {
    //     return 111
    // }
    // lk().then(res=>{
    //     console.log(res);
    // })

    //async作用的方法,如果内部出现报错,可以被promise的catch方法捕获
    // function f() {
    //     return new Promise((resolve,reject)=>{
    //         throw new Error(11111)
    //         setTimeout(()=>{
    //             console.log(3);
    //             resolve(666)
    //         },3000)
    //     })
    // }
    // (async function() {
    //     console.log(1);
    //     try{
    //         await f()
    //     }catch(e){
    //         console.log(e);
    //     }
    //     console.log(2);
    // })().catch(err=>{
    //     console.log(err);
    // })

    function fn1() {
        return new Promise((resolve,reject)=>{
           setTimeout(()=>{
               resolve(1)
               console.log('1秒');
           },1000)
        })
    }
    function fn2() {
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(2)
                console.log('2秒');
            },2000)
        })
    }
    function fn3() {
        return new Promise((resolve,reject)=>{
            setTimeout(()=>{
                resolve(3)
                console.log('3秒');
            },3000)
        })
    }
    (async function() {
        var a = fn1()
        var b = fn2()
        var c = fn3()
        await a  // 1
        await b  // 2
        await c  // 3
        console.log(a,b,c);
    })()
    // Promise.all([fn1(),fn2(),fn3()]).then(res=>{
    //     console.log(res);
    // })


    function flatten(arg) {
        var resultArr = []
        if (!Array.isArray(arg)) throw new Error('参数要求是数组')
        else {
            for (var key in arg) { // concat返回拼接后的结果，不会改变原有的数组
                if (Array.isArray(arg[key])) resultArr = resultArr.concat(flatten(arg[key]));
                else resultArr.push(arg[key]);
            }
        }
        return resultArr
    }
</script>
</body>
</html>